package com.itic.appbase.framework.common.persistence.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.itic.appbase.framework.common.persistence.model.BaseExample;

public interface CrudDao<M, E extends BaseExample>
        extends BaseMapper {
    /**
     * 查询数据总数.
     * 
     * @param example
     * @return
     */
    int countByExample(E example);

    /**
     * 查询数据列表.
     * 
     * @param example
     * @return
     */
    List<M> selectByExample(E example);

    /**
     * 查询指定数据.
     * 
     * @param id
     * @return
     */
    M selectByPrimaryKey(String id);

    /**
     * 全字段新增.
     * 
     * @param model
     * @return
     */
    int insert(M model);

    /**
     * 指定字段新增.
     * 
     * @param model
     * @return
     */
    int insertSelective(M model);

    /**
     * 更新指定数据.
     * 
     * @param model
     * @return
     */
    int updateByPrimaryKeySelective(M model);

    /**
     * 批量更新
     * 
     * @param model
     * @param example
     * @return
     */
    int updateByExampleSelective(@Param("record") M model, @Param("example") E example);
}
